package itheima.dao;

import org.apache.commons.dbutils.QueryRunner;
import utils.C3P0Util;

import java.sql.Connection;
import java.sql.SQLException;

/*
    dao层定义AccountDao类,操作数据库
    进账方法:
        名称: in
        参数: 连接对象,进账账户,进账金额
        注意:连接对象,进账账户,进账金额由service层传递

     实现步骤:
        1.创建QueryRunner对象
        2.定义sql语句
        3.执行sql语句

    出账方法:
        名称: out
        参数: 连接对象,出账账户,出账金额
        注意:连接对象,出账账户,出账金额由service层传递

     实现步骤:
        1.创建QueryRunner对象
        2.定义sql语句
        3.执行sql语句


    注意:
        1.dao层不负责异常处理,有异常直接抛出
        2.dao层不负责事务管理

 */
public class AccountDao {
    //进账方法
    public void in(Connection con,String inName,double inMoney) throws SQLException {
        //1.创建QueryRunner对象
        QueryRunner qr = new QueryRunner();
        //2.定义sql语句
        String sql = "update account set money = money + ? where name = ?";

        //3.执行sql语句
        qr.update(con,sql,inMoney,inName);

    }
    //出账方法
    public void out(Connection con,String outName,double outMoney) throws SQLException {
        //1.创建QueryRunner对象
        QueryRunner qr = new QueryRunner();

        //2.定义sql语句
        String sql = "update account set money = money - ? where name = ?";
        //3.执行sql语句
        qr.update(con,sql,outMoney,outName);
    }
    /*
    //这种做法是有问题的,因为in和out方法,并没有使用service层传递进来的Connection连接对象
    //而是自己获取连接对象,导致service层和dao层使用的不是一个Connection对象,事务管理出现了问题
    //进账方法
    public void in(Connection con,String inName,double inMoney) throws SQLException {
        //1.创建QueryRunner对象
        QueryRunner qr = new QueryRunner();
        //2.定义sql语句
        String sql = "update account set money = money + ? where name = ?";

        //3.执行sql语句
        qr.update(C3P0Util.getConnection(),sql,inMoney,inName);

    }
    //出账方法
    public void out(Connection con,String outName,double outMoney) throws SQLException {
        //1.创建QueryRunner对象
        QueryRunner qr = new QueryRunner();

        //2.定义sql语句
        String sql = "update account set money = money - ? where name = ?";
        //3.执行sql语句
        qr.update(C3P0Util.getConnection(),sql,outMoney,outName);
    }

    */
}
